const Explode = require('Explode')

cc.Class({
    extends: cc.Component,

    properties: {
        preBoom: cc.Prefab,
        arrow: [cc.SpriteFrame]
    },

    // 初始化导弹参数
    init() {
        this.node.on('fire', this.fire, this)
        this.frame = this.getComponent(cc.Sprite)
        this.node.rotation = 0  // 初始化导弹发射角度
    },
    // 导弹发射
    fire() {
        this.frame.spriteFrame = this.arrow[1]
    },
    // 碰撞开始
    onCollisionEnter(other, self) {
        this.explode()
    },
    // 生成爆炸效果动画
    spawnBoomFX() {
        let fx
        if (cc.pool.hasObject(Explode)) {
            fx = cc.pool.getFromPool(Explode)
            return fx
        }
        else {
            fx = cc.instantiate(this.preBoom)
            return fx.getComponent('Explode')
        }
    },

    // 物体发生爆炸
    explode() {
        // 爆炸动画
        // this.node.parent.emit('exploded')
        let fx = this.spawnBoomFX()
        this.node.parent.addChild(fx.node)
        fx.node.setPosition(this.node.position)
        fx.play()

        // 擦除当前节点并生成新节点
        this.node.removeFromParent()
        cc.pool.putInPool(this)
        this.frame.spriteFrame = this.arrow[0]
    },
})
